package com.dd.cloud.user.service.file;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.cloud.user.entity.file.FileInfo;
import com.dd.cloud.user.req.file.FilePageReq;
import com.dd.cloud.user.res.file.FileUploadProgressRes;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.List;

/**
 * <p>
 * 文件表 服务类
 * </p>
 *
 * @author czg
 * @since 2022-03-23
 */
public interface IFileInfoService extends IService<FileInfo> {

    /**
     * 下载模板文件
     *
     * @param client
     * @param response
     */
    void downloadTemplate(String client, HttpServletResponse response);

    /**
     * 单文件上传 返回文件对象
     *
     * @param file
     * @return
     */
    FileInfo uploadSingleFile(MultipartFile file);

    /**
     * 单文件上传 返回文件对象
     *
     * @param file
     * @return
     */
    FileInfo uploadSingleFile(File file);

    /**
     * 单文件上传 返回文件链接
     *
     * @param file
     * @return
     */
    String uploadSingleFileStr(MultipartFile file);

    /**
     * 单文件上传, 返回字符串
     *
     * @param file
     * @param fix  是否要加文件服务器前缀
     * @return
     */
    String uploadSingleFileStr(MultipartFile file, boolean fix);

    /**
     * 多文件上传
     *
     * @param file
     * @return
     */
    List<FileInfo> uploadMultipleFile(MultipartFile[] file);


    /**
     * 多文件上传
     *
     * @param files
     * @return
     */
    List<FileInfo> uploadMultipleFile(File[] files);

    /**
     * 文件预览
     *
     * @param response
     * @param fileUrl
     * @return
     */
    FileInfo preview(HttpServletResponse response, String fileUrl);

    /**
     * 文件下载
     *
     * @param fileInfo 文件对象
     * @param response
     */
    void downloadFile(FileInfo fileInfo, HttpServletResponse response);

    /**
     * 文件下载
     *
     * @param fileInfo
     * @param response
     */
    void downloadNetFile(FileInfo fileInfo, HttpServletResponse response);

    /**
     * 查看文件上传进度
     *
     * @return
     */
    FileUploadProgressRes uploadProgress(HttpServletRequest request, String time);

    /**
     * 分页查询文件
     */
    Page<FileInfo> filePage(FilePageReq req);

    /**
     * 添加文件
     */
    void addFile(FileInfo fileInfo);

    /**
     * 修改文件状态
     */
    void updateFileStatus(Integer id, Integer status);

    /**
     * 上传文件
     * @param files
     */
    List<FileInfo> getFileStr(MultipartFile[] files);
}
